package zhtt;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * Created by zhtt on 2017/4/10.
 */
public class StudentMainTest {

    public static void main(String[] args){
        //save()1;
        save2();
    }

    public static void save1(){
        // 载入设置
        Configuration configuration = new Configuration().configure();
        //创建session工厂对象
        SessionFactory sessionFactory=configuration.buildSessionFactory();
        //开启session对象
        Session session=sessionFactory.openSession();
        try{
            //开启事务
            session.beginTransaction();
            Student student=new Student("123",20,22.2);
            //执行操作
            session.save(student);
            //提交事务
            session.getTransaction().commit();
        }catch (Exception e){
            e.printStackTrace();
            //失败后回滚事务
            session.getTransaction().rollback();
        }finally {
            //关闭session
            session.close();
        }
    }

    public static void save2(){
        // 载入设置
        Configuration configuration = new Configuration().configure();
        //创建session工厂对象
        SessionFactory sessionFactory=configuration.buildSessionFactory();
        //开启session对象
        /**
         * 与前一例子的区别是本方式可以保证每一个线程内的session是同一个
         * 注意一：该方式必须在事务内执行，无论增、删、改还是查询，事务提交或回滚后自动关闭session
         * 注意二：<property name="hibernate.current_session_context_class">thread</property>增加些配置，即一个线程一个事务
         * hibernate.current_session_context_class取值：thread(表示当前session所处的环境为本地事务环境，Session会与当前线程绑定)
         *                                              jta：表示当前 Session所处的环境为分布式事务环境。
         *                                              jta：SSH整合时使用。
         */
        Session session=sessionFactory.getCurrentSession();
        try{
            //开启事务
            session.beginTransaction();
            Student student=new Student("123",20,22.2);
            //执行操作
            session.save(student);
            //提交事务
            session.getTransaction().commit();
        }catch (Exception e){
            e.printStackTrace();
            //失败后回滚事务
            session.getTransaction().rollback();
        }
    }
}
